package com.fcscs.cservice.gwt.client;

import java.util.Date;
import java.util.List;

import com.fcscs.cservice.domain.InRoomCategory;
import com.fcscs.cservice.domain.InRoomItem;
import com.fcscs.cservice.domain.InRoomMenu;
import com.fcscs.cservice.domain.model.CategoryView;
import com.fcscs.cservice.domain.model.EntityVersionView;
import com.fcscs.cservice.domain.model.InRoomMenuModel;
import com.fcscs.cservice.domain.model.ItemView;
import com.google.gwt.user.client.rpc.AsyncCallback;

public interface ECMSInRoomMenuServiceAsync {

	void createInRoomCategory(InRoomCategory cat, AsyncCallback<InRoomCategory> callback);

	void createInRoomItem(InRoomItem item, AsyncCallback<InRoomItem> callback);

	void createInRoomMenu(InRoomMenu menu, AsyncCallback<InRoomMenu> callback);

	void deleteInRoomCategory(InRoomCategory cat, AsyncCallback<Boolean> callback);

	void deleteInRoomItem(InRoomItem item, AsyncCallback<Boolean> callback);

	void deleteInRoomMenu(InRoomMenu menu, AsyncCallback<Boolean> callback);

	void findInRoomItemViewList(long orgId, long propId, Date deliveryTime, String term,
			AsyncCallback<List<EntityVersionView>> callback);

	void getCategoryViewList(long orgId, long propId, Long parentCategoryId, List<Long> categoryIdList,
			AsyncCallback<List<CategoryView>> callback);

	void getInRoomCategory(long id, int level, AsyncCallback<InRoomCategory> callback);

	void getInRoomCategoryList(long orgId, long propId, int level, boolean isCurrent,
			AsyncCallback<List<InRoomCategory>> callback);

	void getInRoomCategoryList(long orgId, long propId, long versionId, int level,
			AsyncCallback<List<InRoomCategory>> callback);

	void getInRoomItem(long id, AsyncCallback<InRoomItem> callback);

	void getInRoomItemList(long orgId, long propId, long versionId, AsyncCallback<List<InRoomItem>> callback);

	void getInRoomItemList(long orgId, long propId, boolean isCurrent, AsyncCallback<List<InRoomItem>> callback);

	void getInRoomItemViewList(long orgId, long propId, Long parentCategoryId, List<Long> itemIdList,
			AsyncCallback<List<ItemView>> callback);

	void getInRoomMenu(long id, AsyncCallback<InRoomMenu> callback);

	void getInRoomMenuList(long orgId, long propId, long versionId, AsyncCallback<List<InRoomMenu>> callback);

	void getInRoomMenuList(long orgId, long propId, boolean isCurrent, AsyncCallback<List<InRoomMenu>> callback);

	void isInRoomCategoryTaken(long orgId, long propId, String name, Long id, long versionId, int level,
			AsyncCallback<Boolean> callback);

	void isInRoomItemTaken(long orgId, long propId, String name, Long id, long versionId,
			AsyncCallback<Boolean> callback);

	void isInRoomMenuTaken(long orgId, long propId, String parentType, Long parentId, String descendantType,
			Long descendantId, Long id, long versionId, AsyncCallback<Boolean> callback);

	void permDeleteInRoomCategory(InRoomCategory cat, AsyncCallback<Void> callback);

	void saveInRoomCategory(InRoomCategory cat, AsyncCallback<InRoomCategory> callback);

	void saveInRoomCategoryList(List<InRoomCategory> catList, int level, AsyncCallback<List<InRoomCategory>> callback);

	void saveInRoomItem(InRoomItem item, AsyncCallback<InRoomItem> callback);

	void saveInRoomItemList(List<InRoomItem> itemList, AsyncCallback<List<InRoomItem>> callback);

	void saveInRoomMenu(InRoomMenu menu, AsyncCallback<InRoomMenu> callback);

	void saveInRoomMenuList(List<InRoomMenu> menuList, AsyncCallback<List<InRoomMenu>> callback);

	void getInRoomMenuModels(long propId, AsyncCallback<List<InRoomMenuModel>> callback);

	void saveInRoomMenuModels(long propId, List<InRoomMenuModel> menu, AsyncCallback<Boolean> callback);

}
